<?php
/** [用户表逻辑模型]
 * @Author: 976123967@qq.com
 * @Date:   2015-01-09 17:38:09
 * @Last Modified by:   happy
 * @Last Modified time: 2015-03-14 18:41:29
 */
class UserLogic extends Model{


	protected $tableName = 'user';

	

	// 自动验证
    /* array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间])
	*
	*  验证条件
	*  Model::EXISTS_VALIDATE 或者0 存在字段就验证 （默认）
	*  Model::MUST_VALIDATE 或者1 必须验证
	*  Model::VALUE_VALIDATE或者2 值不为空的时候验证
	*
	*  验证时间
	*  Model:: MODEL_INSERT 或者1新增数据时候验证
	*  Model:: MODEL_UPDATE 或者2编辑数据时候验证
	*  Model:: MODEL_BOTH 或者3 全部情况下验证（默认）
	*/

    protected $_validate=array(
    	
        // 用户名验证
        array('username','require','用户名必须填写',1,'regex',1),
     	array('username','check_username','用户名已经存在',1,'callback',3),
     	array('nickname','require','昵称必须填写',1,'regex',3),
     	array('email','require','邮箱必须填写',1,'regex',3),
     	array('email','email','邮箱格式不对',1,'regex',3),

     	array('password','require','密码必须填写',1,'regex',1),
     	array('password','/^.{6,}$/','密码长度至少6位',1,'regex',1),
     	array('passwords','require','确认密码必须填写',1,'regex',1),
     	array('passwords','password','确认密码不正确',1,'confirm',1), 


   		// 编辑时候验证
     	array('password','/^.{6,}$/','密码长度至少6位',2,'regex',2),
     	array('passwords','check_edit_passwords','确认密码必须填写',1,'callback',2),
     	array('passwords','password','确认密码不正确',1,'confirm',2), 




    );




    /**
     * [check_edit_passwords 编辑时候修改密码验证]
     * @return [type] [description]
     */
    public function check_edit_passwords($con)
    {

    	$password = I('post.pasword');
    	if($password != '' && $con =='')
    		return false;
    	else
    		return true;
    }




    /**
	 * [check_username 验证用户名称是否重复]
	 * @param  [type] $con [description]
	 * @return [type]      [description]
	 */
	public function check_username($con)
	{
		$where['username'] = $con;
		$uid = I('post.uid');
		if($uid)
		{
			$where['uid'] = array('neq',$uid);
		}
		if($this->where($where)->getField('uid'))
		{
			return false;
		}
		else
			return true;
	}


	// 自动完成
    protected $_auto = array (

        // 时间
        array('reg_time','time',1,'function'), 
        //array('login_time','time',1,'function'), 
        //ip
        array('login_ip','_ip',1,'callback'),
        // 密码
        array('password','md5',3,'function'),
      
    );





    // ip
    public function _ip()
    {
    	return get_client_ip();
    }





	/**
	 * [check_code 后台验证码比较]
	 * @return [type]       [description]
	 */
	public function check_code()
	{
		$code = I('get.code');
		if(!$code)
			return false;
		if(strtoupper($code) != session('code'))
			return false;
		else
			return true;
	}


	/**
	 * [validate_login 验证登录]
	 * @return [type] [description]
	 */
	public function validate_login()
	{
		/******接收数据******/
		$username = I('post.username');	//用户名
		$password = I('post.password');	//密码
		$code 	  = I('post.code');		//验证码

		/******普通验证******/
		
		
		// 用户名不为空
		if(!$username)
		{
			$this->error = '请输入用户名';
			return false;
		}
		// 密码不为空
		if(!$password)
		{
			$this->error = '请输入密码';
			return false;
		}
		// 验证码验不为空
		if(!$code)
		{
			$this->error = '请输入验证码';
			return false;
		}
		// 验证码是否相等
		if(strtoupper($code) != session('code'))
		{
			$this->error = '验证码输入错误';
			return false;
		}	
		/******数据库验证******/
		$user   = $this->where(array('username'=>$username))->find();
		// 用户不存在
		if(!$user)
		{
			$this->error = '用户名或密码错误';
			return false;
		}
		// 密码不对
		if($user['password'] != md5($password))
		{
			$this->error = '用户名或密码错误';
			return false;
		}

		if($user['lock'])
		{
			$this->error = '用户锁定中，请联系管理员';
			return false;
		}

		$auto = I('post.auto');
		if($auto)
			setcookie(session_name(),session_id(),time()+60*60*24*14,'/');
		else
			setcookie(session_name(),session_id(),0,'/');

		return $user;
	}


	/**
	 * [update_login 更新登录信息]
	 * @param  [type] $user [description]
	 * @return [type]       [description]
	 */
	public function update_login($user)
	{
		// 更新登录信息
		$data = array(
			'login_time'=> time(),
			'times'		=> $user['times']+1,
			'login_ip'  => get_client_ip(),
			'uid'		=>$user['uid'],
 		);
 		$this->save($data);
	}

	/**
	 * [set_session set_session]
	 * @param [type] $user [description]
	 */
	public function set_session($user)
	{
		session('username',	$user['username']);
		session('uid',		$user['uid']);
		session('roleinfo',	$user['role']);
	}



	/**
	 * [get_all 获取对应角色的用户列表]
	 * @param  [arr] $role [description]
	 * @return [type]       [description]
	 */
	public function get_all($role)
	{

		// 开始时间
		$beginTime  	= I('get.search_begin_time','');  
		// 结束时间
		$endTime    	= I('get.search_end_time','');
		// 关键词
		$searchKeyword  = I('get.search_keyword','');

		// 更具初始化数据设置GET
		if(!$beginTime)
			$_GET['search_begin_time'] = '';
		if(!$endTime)
			$_GET['search_end_time']   = '';
		if(!$searchKeyword)
			$_GET['search_keyword']    = '';






		// 设置where
		$where['role'] = array('in',$role);


		// 开始时间
		if($beginTime)
			$where[]  = 'reg_time >='.strtotime($beginTime);
		// 结束时间
		if($endTime)
			$where[]  = 'reg_time <='.strtotime($endTime)+24*60*60;

		// 搜索用户
		if($searchKeyword )
			$where[] = "username like '%{$searchKeyword}%'";


		$count = $this->where($where)->count();

		// 没有数据
		if(!$count)
			return false;
		// 分页
		import('ORG.Util.Page');// 导入分页类
		$page  = new Page($count,20);
		// 排序
		$order = 'uid desc';
		// limit
		$limit = $page->firstRow.','.$page->listRows;
		$data  = $this->limit($limit)->where($where)->order($order)->select();

		foreach($data as $k=>$v)
		{
			// 格式化时间
			// 注册时间
			$data[$k]['reg_time']   = $v['reg_time']?date('Y-m-d H:i:s',$v['reg_time']):'';
			// 最近登录时间
			$data[$k]['login_time'] = $v['login_time']?date('Y-m-d H:i:s',$v['login_time']):'';
			// 是否锁定
			$data[$k]['lock']       = $v['lock']?'锁定':'正常';
		}

		// 分页样式更改
		$page->setConfig('theme','<span>%totalRow% %header% %nowPage%/%totalPage% 页 </span>%upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%');

		$data['page'] = $page->show();
		
		return $data;
	}


	/**
	 * [add_user 添加用户]
	 */
	public function add_user()
	{

		if(!$this->create())
			return false;
		return $this->add();
	}

	/**
	 * [find_one 查找一条数据]
	 * @return [type] [description]
	 */
	public function find_one()
	{
		$uid  = I('get.uid');
		$data = $this->find($uid);
		return $data;
	}


	/**
	 * [update_user 修改用户]
	 * @return [type] [description]
	 */
	public function update_user()
	{

	    // 执行验证
		if(!$this->create())
			return false;

		// 没有输入密码
		$password = I('post.password');
		if(!$password)
			unset($this->data['password']);

		$this->save();

		return true;

	}


	/**
	 * [delete_user 删除会员]
	 * @return [type] [description]
	 */
	public function delete_user()
	{
		$uid = I('get.uid');
		if(!$this->find($uid))
		{
			$this->error = '链接错误';
			return false;
		}
		$this->delete($uid);
		return  true;
	}

	
	/**
	 * [find_cur 获取当前用户的数据]
	 * @return [type] [description]
	 */
	public function find_cur()
	{
		$uid  = session('uid');
		return  $this->find($uid);
	}


	/**
	 * [update_cur 修改用户]
	 * @return [type] [description]
	 */
	public function update_cur()
	{
		$email     = I('post.email');
		$nickname  = I('post.nickname');

		if(!$email)
		{
			$this->error='请输入邮箱';
			return false;
		}
		if(!$nickname)
		{
			$this->error='请输入昵称';
			return false;
		}
		$uid = I('post.uid');
		$this->save(array('email'=>$email,'nickname'=>$nickname,'uid'=>$uid));

		return true;
	}


	/**
	 * [update_change 修改密码]
	 * @return [type] [description]
	 */
	public function update_change()
	{
		// 新密码验证
		$password = I('post.password');
		if(!$password)
		{
			$this->error='请输入新密码';
			return false;
		}

		if(strlen($password)<6)
		{
			$this->error='新密码长度至少6位';
			return false;
		}
		// 确认密码验证
		$passwords = I('post.passwords');
		if(!$passwords)
		{
			$this->error='请输入确认新密码';
			return false;
		}
		// 旧密码
		$oldpassword = I('post.oldpassword');
		if(!$oldpassword)
		{
			$this->error='请输入旧密码';
			return false;
		}
		$user= $this->find(session('uid'));
	

		if($user['password']!=MD5($oldpassword))
		{
			$this->error='旧密码错误';
			return false;
		}
		// 更新
		$this->save(array('password'=>md5($password),'uid'=>session('uid')));
		
		return true;	
	}

	/**
	 * [operation 批量操作]
	 * @return [type] [description]
	 */
	public function operation()
	{
		$uid  = I('post.uid');
		switch (true) 
		{
			// 删除
			case isset($_POST['update_del']):
				
				$authGroupAccessModel=D('AuthGroupAccess');
				foreach($uid as $k=>$v)
				{
					$this->delete($v);
					$authGroupAccessModel->where(array('uid'=>$v))->delete();
				}
				$msg= '删除成功';
				break;
			// 锁定
			case isset($_POST['update_check_lock']):
				
				foreach($uid as $k=>$v)
				{
					$this->save(array('lock'=>1,'uid'=>$v));
					
				}
				$msg= '锁定成功';
				break;
			// 取消锁定
			case isset($_POST['update_cancle_lock']):
				
				foreach($uid as $k=>$v)
				{
					$this->save(array('lock'=>0,'uid'=>$v));
				}
				$msg= '取消锁定成功';
				break;	
			default:
				$this->error = '操作选择错误';
				return false;

		}

		return $msg;
	}

}